package leetcode.stacklist;

import java.util.ArrayDeque;
import java.util.Objects;
import java.util.Queue;

/**
 * 225.用队列实现栈
 * 请你仅使用两个队列实现一个后入先出（LIFO）的栈，并支持普通栈的全部四种操作（push、top、pop 和 empty）。
 */
public class _225 {

    public static void main(String[] args) {
        MyStack myStack = new MyStack();
        myStack.push(1);
        myStack.push(2);

        System.out.println("top = " + myStack.top());// 2
        System.out.println("pop = " + myStack.pop()); // 2
        System.out.println("empty = " + myStack.empty()); //false


    }


    static class MyStack {
        Queue<Integer> queue = null;


        public MyStack() {
            this.queue = new ArrayDeque<>();
        }

        public void push(int x) {
            queue.add(x);
        }

        public int pop() {
            if (queue.isEmpty()) {
                return -1;
            }
            int size = queue.size();

            while (--size > 0) {
                queue.add(queue.poll());
            }
            return queue.poll();
        }

        public int top() {
            if (queue.isEmpty()) {
                return -1;
            }
            int size = queue.size();

            while (--size > 0) {
                queue.add(queue.poll());
            }
            int top = queue.peek();
            queue.add(queue.poll());
            return top;
        }

        public boolean empty() {
            return queue.isEmpty();
        }
    }
}
